package de.mnit.basis.db.sys;

import de.mnit.basis.db.konstant.DBMS;
import de.mnit.basis.db.sql.S_SqlDB;
import de.mnit.basis.db.zugang.S_DBZugang;
import de.mnit.basis.fehler.Fehler;
import de.mnit.basis.fehler.system.F_Sys_DB;

/**
 * @author Michael Nitsche
 * 15.12.2007	Erstellt
 */
public abstract class A_DBManager implements S_DBManager {

	private S_SqlDB assistent=null;
	public final DBMS db;


	public A_DBManager(DBMS db) {
		this.db=db;
	}


	public final DBMS gDBMS() {
		return db;
	}

	private S_SqlDB dbms() throws F_Sys_DB {
		if(this.assistent==null) Fehler.db.da_NichtVerbunden();
		return this.assistent;
	}

	public void verbinden(S_DBZugang dbz) throws F_Sys_DB {
		if(this.assistent!=null)
			Fehler.db.da_Verbunden("Verbindung wurde bereits aufgebaut!");
		this.assistent=neuDBMS(dbz);
	}

	public S_SqlDB direkt() {
		try {
			return this.dbms();
		}
		catch(F_Sys_DB e) {
			throw Fehler.zeig(e, false); //TODO Prüfen!!!
		}
	}

	public void schliessen() {
		if(assistent!=null) {
			assistent.schliessen();
			assistent=null;
		}
	}

	public boolean gVerbunden() {
		return this.assistent!=null;
	}

	protected abstract S_SqlDB neuDBMS(S_DBZugang dbz) throws F_Sys_DB;

}
